/*
 * Copyright 2020 eBlocker Open Source UG (haftungsbeschraenkt)
 *
 * Licensed under the EUPL, Version 1.2 or - as soon they will be
 * approved by the European Commission - subsequent versions of the EUPL
 * (the "License"); You may not use this work except in compliance with
 * the License. You may obtain a copy of the License at:
 *
 *   https://joinup.ec.europa.eu/page/eupl-text-11-12
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
export default function AutoCloseService($interval) {
    'ngInject';

    const SECONDS_TO_CLOSE_DIALOG = 15;
    let closeDialogPromise;

    function startCountdown(config) {
        if (!angular.isFunction(config.expiredFn)) {
            throw new Error('No expire function defined in config object.');
        }
        if (!angular.isNumber(config.seconds)) {
            throw new Error('No time definition in config object.');
        }
        closeDialogPromise = $interval(function() {
            config.seconds--;
            if (config.seconds === 0) {
                config.expiredFn();
            }
        }, 1000);
    }

    function stopCountdown() {
        if (angular.isDefined(closeDialogPromise)) {
            $interval.cancel(closeDialogPromise);
        }
    }

    function getSeconds() {
        return SECONDS_TO_CLOSE_DIALOG;
    }

    return {
        startCountdown: startCountdown,
        stopCountdown: stopCountdown,
        getSeconds: getSeconds
    };
}
